/**  
 核心知识:作用域在函数定义的时候(代码编写时)就已经确定了,根据每一个代码块进行确定,跟函数在哪里调用无关,这叫做词法作用域/静态作用域
 底层知识: 函数定义是会创建一个[[Environment]]内部属性(运行过程中执行定义时,而不是编写代码时),
 他指向当前函数定义时所在的词法环境,但是需要注意的是,在编码完成之后运行之前,作用域已经确定了,但是词法环境还不存在
 也就是在没有运行代码之前[[Environment]]这个属性不存在,只有在运行的时候才会创建并指向所在的词法环境
 根据词法环境对象中的Outer属性可以找到上一层词法环境,形成作用域链
 无论在哪里执行,他都会通过这个内部属性去寻找变量,而不是根据调用位置
*/
 let n = 1;
function A(){
    function B(){
        console.log(n);
    };
    B();
};

function C(){
    let n = 3;
    A()
}

C() //这里应该打印1而不是打印3,原因很简单,函数B的作用域在定义函数的时候就确定了
